@echo off
chcp 65001 >nul

REM 学生荣誉信息管理系统 - 数据库迁移脚本 (Windows版本)
REM 用于执行数据库迁移和更新

echo ==========================================
echo 学生荣誉信息管理系统 - 数据库迁移
echo ==========================================

REM 设置环境变量
set FLASK_APP=wsgi.py
set FLASK_ENV=development

REM 检查Python环境
echo 检查Python环境...
python --version
if %errorlevel% neq 0 (
    echo 错误: Python未安装或未添加到PATH环境变量
    pause
    exit /b 1
)

REM 检查Flask是否安装
echo 检查Flask环境...
python -c "import flask; print('Flask版本:', flask.__version__)"
if %errorlevel% neq 0 (
    echo 错误: Flask未安装
    pause
    exit /b 1
)

python -c "import flask_migrate; print('Flask-Migrate已安装')"
if %errorlevel% neq 0 (
    echo 错误: Flask-Migrate未安装
    pause
    exit /b 1
)

REM 检查当前目录
echo 当前工作目录: %cd%

REM 检查wsgi.py文件是否存在
if not exist "wsgi.py" (
    echo 错误: wsgi.py文件不存在，请确保在项目根目录下运行此脚本
    pause
    exit /b 1
)

REM 检查migrations目录是否存在
if not exist "migrations" (
    echo 错误: migrations目录不存在
    echo 请先运行 init_db.bat 进行数据库初始化
    pause
    exit /b 1
)

REM 显示当前迁移状态
echo 当前迁移状态:
flask db current

echo 迁移历史:
flask db history

REM 询问用户是否继续
set /p choice="是否继续执行数据库迁移? (y/N): "
if /i not "%choice%"=="y" (
    echo 取消操作
    pause
    exit /b 0
)

REM 执行数据库迁移
echo 开始生成迁移文件...
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do set today=%%a%%b%%c
for /f "tokens=1-2 delims=: " %%a in ('time /t') do set now=%%a%%b
flask db migrate -m "数据库迁移 %today% %now%"

if %errorlevel% equ 0 (
    echo 迁移文件生成成功!
    
    REM 显示生成的迁移文件
    echo 生成的迁移文件:
    dir migrations\versions\ /b | findstr /v "^$" | tail -5
    
    REM 询问是否立即应用迁移
    set /p choice="是否立即应用迁移到数据库? (y/N): "
    if /i "%choice%"=="y" (
        echo 开始应用迁移到数据库...
        flask db upgrade
        
        if %errorlevel% equ 0 (
            echo ==========================================
            echo 数据库迁移成功!
            echo 所有表已创建并更新
            echo ==========================================
            
            REM 显示当前迁移状态
            echo 当前迁移状态:
            flask db current
            
        ) else (
            echo ==========================================
            echo 数据库迁移失败!
            echo 请检查以下可能的问题:
            echo 1. 数据库连接是否正常
            echo 2. 数据库用户是否有足够权限
            echo 3. 数据库服务器是否可访问
            echo ==========================================
            pause
            exit /b 1
        )
    ) else (
        echo ==========================================
        echo 迁移文件已生成，但未应用到数据库
        echo 您可以稍后手动运行: flask db upgrade
        echo ==========================================
    )
) else (
    echo ==========================================
    echo 迁移文件生成失败!
    echo 请检查模型定义是否正确
    echo ==========================================
    pause
    exit /b 1
)

pause 